package com.lemon.smartsafety.app;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.support.multidex.MultiDexApplication;

import com.google.gson.Gson;
import com.lemon.smartsafety.BuildConfig;

import com.lemon.smartsafety.utils.ImgLoadUtil;
import com.lemon.smartsafetynew.util.crash.CrashHandler;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.orhanobut.logger.Logger;
import com.squareup.leakcanary.RefWatcher;
//import com.tencent.bugly.Bugly;
//import com.tencent.bugly.beta.Beta;
import com.zhy.http.okhttp.log.LoggerInterceptor;

import cn.jpush.android.api.JPushInterface;

/**
 * Created by SilenceDut on 2015/11/28.
 */
public class IApplication extends MultiDexApplication {
    private static Context  _context;
    public static  Activity _tempOneActivity;
    public static  Activity _tempTwoActivity;
    public static  Activity _tempBuildPropActivity;

    private static ImageLoader imageLoader = null;
    private static DisplayImageOptions options = null;
    private static Resources resources = null;

    private RefWatcher mRefWatcher;

    //是否是测试环境
    public static final boolean ISTEST = true;

    public static Gson gson=new Gson();

    public static LoggerInterceptor loggerInterceptor;

    @Override
    public void onCreate() {
        super.onCreate();
        _context = getApplicationContext();
        mRefWatcher = installLeakCanary();
        AppService.getInstance().initService();

        if (BuildConfig.DEBUG) {
            //OkHttpUtils.getInstance().debug("safe_cloud", false);
            Logger.init(Constants.APP_TAG+"DEBUG").setMethodCount(3);
        }
        Logger.init(Constants.APP_TAG).setMethodCount(3);

        //OomExceptionHandler.install(IApplication.context());  delete by Andrew.yin 2017/10/18

        try {
            imageLoader = ImgLoadUtil.initImageLoader(imageLoader, _context);
            options = ImgLoadUtil.initDisplayImageOptions(options, _context);
            resources = ImgLoadUtil.initResources(resources, _context);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //add by Andrew.yin 2017/10/13 begin. 初始化极光推送
        //JPushInterface.setDebugMode(true); 	// 设置开启日志,发布时请关闭日志
        JPushInterface.init(this);     		// 初始化 JPush
        //add by Andrew.yin 2017/10/13 end

        // === catch crash log begin ===
        CrashHandler mCrashHandler = CrashHandler.getInstance();
        mCrashHandler.init();
        // === catch crash log end ===

    }


    protected RefWatcher installLeakCanary() {


        if (BuildConfig.DEBUG) {
            //mRefWatcher = LeakCanary.install(this);
            mRefWatcher = RefWatcher.DISABLED;
        }else{
            mRefWatcher = RefWatcher.DISABLED;
        }
        return mRefWatcher;
    }
    public static RefWatcher getRefWatcher() {
        return IApplication.context().mRefWatcher;
    }

// delete by Andrew.yin 2017/9/24 begin
//    private void initCrashReport() {
//
//        /***** Beta高级设置 *****/
//        /**
//         * true表示app启动自动初始化升级模块;
//         * false不会自动初始化;
//         * 开发者如果担心sdk初始化影响app启动速度，可以设置为false，
//         * 在后面某个时刻手动调用Beta.init(getApplicationContext(),false);
//         */
//        if (BuildConfig.FLAVOR.equals("bugly_beta")) {
//            Beta.autoInit = true;
//        }else{
//            Beta.autoInit = false;
//        }
//
//        /**
//         * true表示初始化时自动检查升级;
//         * false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法;
//         */
//        Beta.autoCheckUpgrade = !BuildConfig.DEBUG;
//
//        /**
//         * 设置升级检查周期为60s(默认检查周期为0s)，60s内SDK不重复向后台请求策略);
//         */
//        Beta.upgradeCheckPeriod = 60 * 1000;
//
//        /**
//         * 设置启动延时为1s（默认延时3s），APP启动1s后初始化SDK，避免影响APP启动速度;
//         */
//        Beta.initDelay = 5 * 1000;
//
//        /**
//         * 设置通知栏大图标，largeIconId为项目中的图片资源;
//         */
//        Beta.largeIconId = R.mipmap.ic_launcher;
//
//        /**
//         * 设置状态栏小图标，smallIconId为项目中的图片资源Id;
//         */
//        Beta.smallIconId = R.mipmap.ic_launcher;
//
//        /**
//         * 设置更新弹窗默认展示的banner，defaultBannerId为项目中的图片资源Id;
//         * 当后台配置的banner拉取失败时显示此banner，默认不设置则展示“loading“;
//         */
//        Beta.defaultBannerId = R.mipmap.ic_launcher;
//
//        /**
//         * 设置sd卡的Download为更新资源保存目录;
//         * 后续更新资源会保存在此目录，需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
//         */
//        Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
//
//        /**
//         * 点击过确认的弹窗在APP下次启动自动检查更新时会再次显示;
//         */
//        Beta.showInterruptedStrategy = true;
//        /**
//         * 只允许在MainActivity上显示更新弹窗，其他activity上不显示弹窗;
//         * 不设置会默认所有activity都可以显示弹窗;
//         */
//        Beta.canShowUpgradeActs.add(MainActivity.class);
//
//
//        /***** 统一初始化Bugly产品，包含Beta *****/
//        Bugly.init(this, BuildConfig.DEBUGLY_APPID + "", false);
//    }
// delete by Andrew.yin 2017/9/24 end

    public static LoggerInterceptor getLoggerInterceptor() {
        return loggerInterceptor;
    }

    public static Gson getGson() {
        return gson;
    }

    public static boolean ISTEST() {
        return ISTEST;
    }

    public static synchronized IApplication context() {
        return (IApplication) _context;
    }


    public static ImageLoader getImageLoader() {
        return imageLoader;
    }

    public static Resources getAppResources() {
        return resources;
    }

    public static DisplayImageOptions getOptions() {
        return options;
    }


}
